במאמר זה נעשה סקירה מזורזת על ארכיטקטורת הMVC, ומבנה התיקיות המרכזיות של CI
אז לאחר שבמאמר הקודם הסברנו איך להתקין את הCI ולהקשיח אותה, נלמד במאמר הנוכחי איך להתחיל להשתמש בה
Introduction to MVC
מה זה הראשי תיבות האלו? למה לקלל?
MVC איננה קללה, MVC היא ארכיטקטורה של תכנות שבה אנחנו מפרידים את הקוד שלנו ל:
Model
View
Controller
החלוקה הזאת שמייד נסביר אותה, מאפשרת לנו לנהל את הקוד שלנו בקלות וביעילות, כך שלכל נושא במערכת יש את החלק שמטפל בו.
Model
תפקיד שכבת המודל הוא ניהול הנתונים, לרוב זה יהיה משיכה של נתונים מהDB והכנה שלהם, אך ניתן כמובן למשוך את הנתונים מקובץ XML, CSV או כל data source אחר.
הייתרון במודל הוא שמקום לכתוב את אותה שאילתה ב10 קבצים שונים אנחנו נכתוב אותה פעם אחת במודל, ונקרא לה כל פעם שנצטרך אותה.
Controller
הקונטרולר הוא השוטר תנועה של המערכת, בPHP הוא זה שמקבל את הRequest ודואג להעביר/למשוך את הנתונים את הנתונים למודל ולVIEW, הBUISNESS LOGIC של המערכת שלכם יושב כאן.
ולמי שרק מתחיל ללמוד MVC, הController הוא התוכנית שלכם, הוא המקבילה לקובץ PHP שהייתם כותבים בעבר ושהיה מפעיל את שאר הפונקציונאליות.
View
הView הוא שכבת התצוגה/output בעצם לאחר שהכנו את הנתונים אנחנו נעביר אותם לVIEW כדי שיציג אותם, הView יחזיק את הHTML שלכם, תגי הXML או כל מידע אחר שתרצו לשלוח למשתמש.
רגע, למה לסבך את העניינים? הסתדרתי מעולה לפני הMVC
נכון, ניתן להסתדר גם בלי הMVC, ניתן גם להסתדר בלי OOP ולכתוב קוד פרוצדוראלי אבל הניהול של הקוד יהיה סיוט, הMVC הופך את ניהול ותחזוקת הקוד לקלים ופשוטים, לדוגמא, הHTMLיסט שיודע רק HTML יכול להתעסק ישירות בVIEW בלי שהוא נוגע בתוכנית עצמה ובלי שהוא יוכל להרוס אותה בטעות, השימוש בModel מאפשר לנו לכתוב שאילתות מורכבות במקום אחד בלבד ואז לקרוא לו בכל פעם שאנו רוצים, במקום להחזיק את השאילתה והקישור לDB בכל מקום שבו צריך מידע.
לסיכום: תפקיד הMVC הוא סדר, והסדר הזה חוסך הרבה מאוד זמן כשזה מגיע לתחזוקת קוד.
נכון שכמו בכל התחלה לוקח קצת זמן להתרגל אליו אבל אחר כך השימוש בו מקצר את זמן הפיתוח בעשרות אחוזים.
סכמת MVC בPHP
אנחנו יכולים לראות שלאחר שהבקשה מגיעה לשרת הוא מבצע routing המשמעות של זה היא בעצם ההפעלה של הrewrite module שמעביר את הבקשה לindex.php (ועל זה בהרחבה בהמשך), הindex נקרא גם dispatcher כיוון שהוא מעלה את המערכת ומתחיל את הפעולה של הפריימוורק, ואז הוא מעביר את השרביט לקונטרולר, שמצידו מפעיל את המודל והview.
CodeIgniter directory structure
מבוא
אז איך המודל הזה של הMVC מתחבר אלינו?
אם התקנתם את הCI וההתקנה עברה בשלום ראיתם מסך של welcome screen המסך הזה נוצר על ידי פעולה של המערכת ועכשיו נעשה הצצה ראשונה על הקוד שלה.
לאחר ההתקנה של הCI יש לכם 2 ספריות לאחת קוראים application ולשניה system (את הuser guide המלצתי למחוק!) הapplication היא הספריה שלכם, בתוכה אנחנו הולכים לכתוב את התוכניות שלנו. לעומתה הsystem היא הפריימוורק עצמה, אנחנו לא נוגעים בה ולא משנים שם כלום!, אם רוצים לשנות את הפונקציונאליות של CI ניתן לעשות זאת דרך כל מיני מנגנונים והרחבות בapplication.
אחד הייתרונות בהפרדה זו היא שאם יצא עדכון או שרוצים לשדרג, כל מה שצריך לעשות הוא למחוק את הSYSTEM ולשים את החדש במקום. (לעיתים נידרש דם שינויים בקבצי הconfig...ראו כאן)
לסיכום אנחנו עובדים תחת application הsystem לא מעניין אותנו ולא נוגעים בו
מבנה הapplication
כמו שציינתי אנחנו נעבוד תחת ספרייה זאת וכאן תשב כל התוכנית שלנו, כרגע יש שם הרבה תיקיות שרובן ריקות, ואנחנו לאט לאט נלמד מה ניתן לעשות עם כל אחת.
כרגע מעניינות אותנו 4 תיקיות.
config - תחת תיקייה זו יושבים כל קבצי ההגדרות של הCodeIgniter
controllers - בתיקייה זו נשים את הקונטרולרים שלנו
model - תיקיית המודלים
view - תיקיית הoutput בעצם פה ישבו כל הHTMLים שלנו
אנו נראה שתיקיית המודל ריקה כרגע כיוון שאנחנו עוד לא מדברים עם DB, ותחת הקונטרולר יש קובץ שנקרא welcome.php ותחת הview יש את welcome_message.php
2 הקבצים האלו הם אלו שהציגו לנו את מסך הכניסה שראינו, הCI הפעיל את הקונטרולר שנקרא Welcome.php, בתוכו ישנה מתודה שנקראת Index() והיא זו שהופעילה אוטומטית, והיא פשוט קראה לview, שמכיל HTML בלבד (אני לא שם את זה פה...)
שיעור הבא נלמד איך לכתוב את זה בעצמינו...
תגובות לכתבה:
הסבר מצויין :)
>"הקונטרולר הוא השוטר תנועה של המערכת, בPHP הוא זה שמקבל את הRequest ודואג להעביר/למשוך את הנתונים את הנתונים למודל ולVIEW, הBUISNESS LOGIC של המערכת שלכם יושב כאן."
זה ממש לא אמור להיות ככה. controller אמור להיות כשכבה דקה שמחברת בין ה-model ל-view. המודל צריך להכיל את ה-business logic, ולא הקונטרול. מה שתיארת כאן, נקרא Fat Stupid Ugly Controllers כמו שאומרים ב-zend. זה טעות ושגיאה בתפיסה של mvc, וזה גם טעות נפוצה.
אחלה מדריך ! הורדתי ואני מחכה למדריך הבא !
לcthulhu: אחי, מבוא זה מבוא, משאירים את הכל simple as is, בהמשך לומדים להעביר את הכל לספריות ומודלים....
מה הקשר בכלל למה שאמרתי? יש לך במדריך שגיאה נפוצה בהבנת הקונצפציה של mvc. אתה כתבת שהקונטרולר אמור להכיל את ה-business logic, וזאת טעות חמורה. מה שכתבת בתגובה הזאת שלך למעלה, בכלל לא קשור. אפשר לשמור על המדריך "simple as is" ובאותו הזמן לא להטעות אחרים.
cthulhu תרגיע בבקשה,
זה אחלה שאתה מבהיר את העניינים אבל בטעם טוב,
מכתביו של כותב המאמר ניכר לחלוטין שהוא מבין את העניין,
כי אכן הוא הסביר את כל המבנה פרט לאותו עניין בצורה נכונה,
כנראה טעות קטנה כשמקלידים וחושבים מהר,
businss logic בקונטרולר היא לא טעות נפוצה,
היא טעות מוחלטת,
הקונטרולר בעיקר מעביר בקשות מהWEB למודלים,
טוען קבצי עיצוב, ועוד כל מיני קטנות, זה בגדול מאוד.
אני רגוע. רק לדעתי, המחבר צריך ללמוד לקבל ביקורת ולא להתווכח. ואני לא ממש בטוח שזו טעות בהקלדה. אנשים שיקראו את זה ימשיכו לדחוף את כל התוכן והחיבורים ל-db שלהם לקונטרולר, וזה רק יביא לעלייה בכמות קודים גרועים.
כל הכבוד :) תמשיך לכתוב מדריכים
לדעתי בתוך כותב "כבד" ב- Codeigniter דווקא FRAMEWORK זה נכתב כ-
loosely coupled mvc .גמישות , גמישות ! וזה יתרונו הגדול.
כאשר יש צורך ב- REUSE לכל ה- controllers / views / mode;s
דווקא הפיתרון היעל והתחזוקתי ביותר הוא בכתיבת LIbrary שכולם
יכולים לגשת אליו. כמובן שיש להשתמש ב-
;()$ci = &get_instance
בספריה כדי לגשת ל- DB / SESSION ו- resources אחרים של המופע של CI
חחח אהבתי "מה זה המילים האלה למה לקלל"